package br.com.rhweb.util;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import br.com.rhweb.dao.Dao;
import br.com.rhweb.hibernate.HibernateUtil;
import br.com.rhweb.modelos.Estado_Civil;
import br.com.rhweb.modelos.Pessoa;
import br.com.rhweb.modelos.Pessoa;
import br.com.rhweb.modelos.Raca;

public class RepositorioFuncionario {
	
	private List<Pessoa> funcionarios = new ArrayList<Pessoa>();
	private PreparedStatement pstm ;
	private ResultSet rs;
	
	public List<Pessoa> list() {

		//Consulta Tabela de Funcionarios
		String sql = "SELECT CPF," +
				" NUM_IDENT," +
				" ORG_IDENT," +
				" UF_IDENT," +
				" NOME," +
				" DAT_NASC," +
				" NOME_PAI," +
				" NOME_MAE," +
				" SEXO," +
				" NUM_FILHOS," +
				" NUM_CART," +
				" SERIE_CART," +
				" UF_CART," +
				" NATURAL," +
				" UF_NAT," +
				" TIT_ELEI," +
				" ZONA," +
				" SECAO," +
				" FATOR_SANGUINEO," +
				" TIPO_SANGUINEO," +
				" EST_CIVIL," +
				" COD_RACA," +
				" END_NUMERO," +
				" END_COMPLEMENTO" +
				" SIT_FUNC" +
				" FROM Funcionarios"+
				" GROUP BY CPF, NUM_IDENT, ORG_IDENT, UF_IDENT, NOME, DAT_NASC, NOME_PAI, NOME_MAE, SEXO, NUM_FILHOS, NUM_CART," +
				" SERIE_CART, UF_CART, NATURAL, UF_NAT, TIT_ELEI, ZONA, SECAO, FATOR_SANGUINEO, TIPO_SANGUINEO, EST_CIVIL, COD_RACA," +
				" END_NUMERO, END_COMPLEMENTO, SIT_FUNC" +
				" HAVING SIT_FUNC = '01'"+
				" ORDER BY CPF";
		
		Session s = HibernateUtil.getSessionfactory().getCurrentSession();
		try {
			pstm = ConexaoJDBC.getConnection().prepareStatement(sql);
			rs = pstm.executeQuery();
			
			Dao<Raca> daoRaca = new Dao<Raca>(s, Raca.class);
			Dao<Estado_Civil> daoEstadoCivil = new Dao<Estado_Civil>(s, Estado_Civil.class);
			
			Pessoa funcionario;
			s.beginTransaction();
			while(rs.next()){
				funcionario = new Pessoa();
				funcionario.setCpf(rs.getString("CPF"));
				funcionario.setIdentidade(rs.getString("NUM_IDENT"));
				funcionario.setOrgaoEmissor(rs.getString("ORG_IDENT"));
				funcionario.setUfEmissaoIdentidade(rs.getString("UF_IDENT"));
				funcionario.setNome(rs.getString("NOME"));
				funcionario.setDataNasc(rs.getDate("DAT_NASC"));
				funcionario.setNomePai(rs.getString("NOME_PAI"));
				funcionario.setNomeMae(rs.getString("NOME_MAE"));
				funcionario.setSexo(rs.getString("SEXO"));
				funcionario.setRaca(daoRaca.load(Integer.parseInt(rs.getString("COD_RACA") == null ? "6" : rs.getString("COD_RACA"))));
				funcionario.setEstadoCivil(daoEstadoCivil.load(Integer.parseInt(rs.getString("EST_CIVIL") == null ? "6" : rs.getString("EST_CIVIL"))));
				funcionario.setQtdFilhos(rs.getString("NUM_FILHOS"));
				funcionario.setNumeroCTPS(rs.getString("NUM_CART"));
				funcionario.setSerieCTPS(rs.getString("SERIE_CART"));
				funcionario.setUfCTPS(rs.getString("UF_CART"));
				funcionario.setNaturalidade(rs.getString("NATURAL"));
				funcionario.setUfNaturalidade(rs.getString("UF_NAT"));
				funcionario.setNumeroTitEleitoral(rs.getString("TIT_ELEI"));
				funcionario.setZonaTitEleitoral(rs.getString("ZONA"));
				funcionario.setSecaoTitEleitoral(rs.getString("SECAO"));
				funcionario.setFatorSanguineo(rs.getString("FATOR_SANGUINEO"));
				funcionario.setTipoSanguineo(rs.getString("TIPO_SANGUINEO"));					
				funcionarios.add(funcionario);
			}
			
			s.getTransaction().commit();
			ConexaoJDBC.getConnection().close();
			
		} catch (SQLException e) {
			s.getTransaction().rollback();
			System.out.println("Erro: "+e.getMessage());
		}
		return funcionarios;

	}
	
}
